package com.helin.helinhealth.common;

/**
 * 结果码枚举类
 * 
 * <p>
 * 定义系统中所有的响应状态码及其描述，统一管理API返回的状态码，
 * 避免代码中出现魔法数字，提高代码可维护性。
 * </p>
 * 
 * <p>
 * 状态码规则：
 * - 200-299: 成功相关状态码
 * - 400-499: 客户端错误相关状态码
 * - 500-599: 服务端错误相关状态码
 * - 600-699: 业务相关的错误状态码
 * </p>
 */
public enum ResultCode {
    
    /**
     * 成功
     */
    SUCCESS(200, "操作成功"),
    
    /**
     * 未授权（未登录）
     */
    UNAUTHORIZED(401, "未授权（Token失效）"),
    
    /**
     * 权限不足
     */
    FORBIDDEN(403, "权限不足"),
    
    /**
     * 请求资源不存在
     */
    NOT_FOUND(404, "请求资源不存在"),
    
    /**
     * 服务器内部错误
     */
    INTERNAL_SERVER_ERROR(500, "服务器内部错误"),
    
    /**
     * 参数错误
     */
    PARAM_ERROR(400, "参数错误"),
    
    /**
     * 业务异常 - 通用
     */
    BUSINESS_ERROR(600, "业务异常"),
    
    /**
     * 数据不存在
     */
    DATA_NOT_FOUND(601, "数据不存在"),
    
    /**
     * 数据已存在
     */
    DATA_ALREADY_EXISTS(602, "数据已存在"),
    
    /**
     * 操作失败
     */
    OPERATION_FAILED(603, "操作失败"),
    
    /**
     * 权限验证失败
     */
    PERMISSION_DENIED(604, "权限验证失败"),
    
    /**
     * 药品管理相关错误 - 药品不存在
     */
    MEDICINE_NOT_FOUND(610, "药品不存在"),
    
    /**
     * 药品管理相关错误 - 无权操作此药品
     */
    MEDICINE_PERMISSION_DENIED(611, "无权操作此药品"),
    
    /**
     * 药品管理相关错误 - 服药打卡失败
     */
    MEDICINE_TAKE_FAILED(612, "服药打卡失败"),
    
    /**
     * 药品管理相关错误 - 库存不足
     */
    MEDICINE_LOW_STOCK(613, "药品库存不足");
    
    /**
     * 状态码
     */
    private final Integer code;
    
    /**
     * 状态描述
     */
    private final String message;
    
    /**
     * 构造方法
     * 
     * @param code 状态码
     * @param message 状态描述
     */
    ResultCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }
    
    /**
     * 获取状态码
     * 
     * @return 状态码
     */
    public Integer getCode() {
        return code;
    }
    
    /**
     * 获取状态描述
     * 
     * @return 状态描述
     */
    public String getMessage() {
        return message;
    }
} 